package com.titan.single.enums;

import java.io.Serializable;

// TODO 待整理
public enum StatusEnum implements Serializable {
    /**
     * 是否 有行李 (第0位)
     */
    ANTI_BOMBING(0),
    /**
     * 是否 有退改政策 (第1位)
     */
    BLACK(1),
    /**
     * 是否 k位政策 (第2位)
     */
    CHANNEL_LIMIT(2);

    /**
     * 0000 0100: 对应int为3
     */
    private final int value;



    StatusEnum(int index) {
        // index为左移位数
        this.value = 1 << index;
    }

    /**
     * 全开
     */
    public static int allOn() {
        return 0xFFFF_FFFF;
    }

    /**
     * 全关
     */
    public static int allOff() {
        return 0x0000_0000;
    }

    /**
     * 判断是否有开启 任一 开关
     */
    public static boolean isOpen(int code) {
        // 通过clazz找到对应
        for (StatusEnum c : StatusEnum.values()) {
            // 通过与运算进行判断
            return (code & c.value) == c.value;
        }
        return false;
    }

    /**
     * 判断是否有开启具体开关
     *
     * @param code 开关数值
     * @param pass 具体开关
     * @return
     */
    public static boolean isOpen(int code, StatusEnum pass) {
        // 通过clazz找到对应
        // 通过与运算进行判断
        return (code & pass.value) == pass.value;
    }

    public static void main(String[] args) {

        boolean open = isOpen(3, ANTI_BOMBING);
        System.out.println(open);
        int i = 1 << 2;
        System.out.println(i);
        boolean b = (4 & 5) == 4;
        System.out.println(b);
        int value1 = ANTI_BOMBING.value;
        System.out.println(value1);
    }

}
